/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.tri.gui.worker;

import java.util.concurrent.ExecutionException;
import org.tri.entity.*;
import org.tri.persistence.PersistenceManager;

/**
 *
 * @author giaco
 */
public class CompraTransientWorker extends TransientWorker {
        
    public CompraTransientWorker ( AbstractCompra compra ){
        super ( compra );
        
    }
    
    /**
     * {@inheritDoc}
     */
    @Override
    protected Object doInBackground() throws Exception {
        AbstractCompra compra = (AbstractCompra)objectToTransient;
        
        //primero, verificamos que no halla animales vendidos en la compra
        boolean error = false;
        for ( AbstractAnimal a : compra.obtenerAnimales()){
            if( a.obtenerVentaActual() != null ){
                error = true;
                break;
            }
                
        }
        
        if ( !error ){
            //tenemos que eliminar algunas partes del arbol manualmente
            //para evitar errores y lentitud
            String query = String.format(
                "DELETE FROM ANIMAL WHERE compra = %s",
                compra.getIdCompra() );

            PersistenceManager.executeQuery( query );
            
            query = String.format(
                "DELETE FROM COMPRA WHERE id_compra = %s",
                    compra.getIdCompra() );

            PersistenceManager.executeQuery( query );

            //debo eliminarlo tambien de las historicas, sino lo pasa a historicas
            query = String.format(
                "DELETE FROM COMPRA_HIST WHERE id_compra = %s",
                    compra.getIdCompra() );

            PersistenceManager.executeQuery( query );
            
        }
        else
            throw new IllegalArgumentException();
        
        return null;

    }//end método doInBackground

    /**
     * Comprueba que se completo con la tarea con éxtito y se envian eventos
     * según corresponda.
     */
    @Override
    protected void done() {
        try {
            //comprobamos que termino con exito
            get();

        } catch ( InterruptedException ex ) {
        } catch ( ExecutionException ex ) {
            fireErrorTransit( ex );

        } finally {
            fireDoneTrasit();

        }

    }//end método done
    
}//end clase CompraTransientWorker
